package Conversor.model;

/**
 * Classe criada para instanciar objetos do tipo Rumo.
 * @author Tiago Bassetto
 * @since Classe criada em 18/06/2013
 */
public class Rumo {
    int grau;
    int minuto;
    int segundo;
    String quadrante;
    float distancia;
    
    public Rumo(){
        
    }

    public int getGrau() {
        return grau;
    }

    public void setGrau(int grau) {
        this.grau = grau;
    }

    public int getMinuto() {
        return minuto;
    }

    public void setMinuto(int minuto) {
        this.minuto = minuto;
    }

    public int getSegundo() {
        return segundo;
    }

    public void setSegundo(int segundo) {
        this.segundo = segundo;
    }

    public String getQuadrante() {
        return quadrante;
    }

    public void setQuadrante(String quadrante) {
        this.quadrante = quadrante;
    }

    public float getDistancia() {
        return distancia;
    }

    public void setDistancia(float distancia) {
        this.distancia = distancia;
    }
             
    //Método para converter Rumo em Azimute
    public String converterRumo(Rumo r){
        switch (r.quadrante) {
            case "NE":
                return r.getGrau() + "º" + r.getMinuto() + "'" + r.getSegundo() + "\".............." + String.format("%.2f", r.getDistancia()) + " m\n";
            case "SE":
                return (179 - r.getGrau()) + "º" + (59 - r.getMinuto()) + "'" + (60 - r.getSegundo()) + "\".............." + String.format("%.2f", r.getDistancia()) + " m\n";
            case "SW":
                return (180 + r.getGrau()) + "º" + r.getMinuto() + "'" + r.getSegundo() + "\".............." + String.format("%.2f", r.getDistancia()) + " m\n";
            case "NW":
                return (359 - r.getGrau()) + "º" + (59 - r.getMinuto()) + "'" + (60 - r.getSegundo()) + "\".............." + String.format("%.2f", r.getDistancia()) + " m\n";
        }
        return null;
    } //Fim do método converterRumo
    
    //Método para retornar a distância formatada
    public String converterDistancia(float dist){
        return "......................." + String.format("%.2f", dist) + " m\n";
    } //Fim do método converterDistancia
    
    //Método para gerar código do AutoCAD
    public String gerarCodigo(Rumo r){
        switch (r.quadrante) {
            case "NE":
                return "@" + r.getDistancia() + "<" + validarValor(r.getGrau()) + "d" + validarValor(r.getMinuto()) + "'" + validarValor(r.getSegundo()) + "\"\r\n";
            case "SE":
                return "@" + r.getDistancia() + "<" + validarValor((179 - r.getGrau())) + "d" + validarValor((59 - r.getMinuto())) + "'" + validarValor((60 - r.getSegundo())) + "\"\r\n";
            case "SW":
                return "@" + r.getDistancia() + "<" + (180 + r.getGrau()) + "d" + r.getMinuto() + "'" + validarValor(r.getSegundo()) + "\"\r\n";
            case "NW":
                return "@" + r.getDistancia() + "<" + validarValor((359 - r.getGrau())) + "d" + validarValor((59 - r.getMinuto())) + "'" + validarValor((60 - r.getSegundo())) + "\"\r\n";
        }
        return null;
    } //Fim do método gerarCodigo
    
    public String gerarCodigo(Rumo r, int a){
        switch (r.quadrante) {
            case "NE":
                return validarValor(r.getGrau()) + "d" + validarValor(r.getMinuto()) + "'" + validarValor(r.getSegundo());
            case "SE":
                return validarValor((179 - r.getGrau())) + "d" + validarValor((59 - r.getMinuto())) + "'" + validarValor((60 - r.getSegundo()));
            case "SW":
                return (180 + r.getGrau()) + "d" + r.getMinuto() + "'" + validarValor(r.getSegundo());
            case "NW":
                return validarValor((359 - r.getGrau())) + "d" + validarValor((59 - r.getMinuto())) + "'" + validarValor((60 - r.getSegundo()));
        }
        return null;
    } //Fim do método gerarCodigo
    
    //Método para gerar código do AutoCAD somente com a distância
    public String gerarCodigo(float dist, String ultimoAzimute){
        return "@" + dist + "<" + ultimoAzimute + "\"\r\n";
    } //Fim do método gerarCodigo
    
    //Método para adicionar "0" antes de números menores que 10
    public String validarValor(int num){
        if(num < 10){
            return "0" + num;
        }
        return Integer.toString(num);
    } //Fim do método validarValor
    
    //Método para mudar a cor da linha
    public String mudarCor(String cor){
        switch (cor) {
            case "Azul":
                return "\r\n_color 142\r\npline\r\n\r\n";
            case "Preto":
                return "\r\n_color ByLayer\r\npline\r\n\r\n";
        }
        return null;
    }
    
} //Fim da classe
